Skip to content

Add quickpic extension#27309

Open
antkuznetsov wants to merge 3 commits intoraycast:mainfrom
antkuznetsov:ext/quickpic
Open

Add quickpic extension#27309
antkuznetsov wants to merge 3 commits intoraycast:mainfrom
antkuznetsov:ext/quickpic

Conversation

@antkuznetsov
Copy link
Copy Markdown

@antkuznetsov antkuznetsov commented Apr 20, 2026

Description

QuickPic is a Raycast extension that lets you save images under keywords and later paste them as files into any app.

Commands

  • QuickPic Library: search your saved images and paste or copy them as files
  • Add Image: import an image from a local path
  • Add Selected Finder Image: import the currently selected Finder image using command arguments

How it works

  • Imported image files are copied into the extension support directory (environment.supportPath)
  • Metadata is stored in Raycast Local Storage as a JSON index
  • Pasting uses Raycast's Clipboard API with { file: ... }, so target apps receive an actual file attachment

Screencast

CleanShot.2026-04-20.at.23.09.54.mov

Checklist

- Add Raycast metadata screenshots
- Remove unused icon asset
@raycastbot raycastbot added new extension Label for PRs with new extensions platform: macOS labels Apr 20, 2026
@raycastbot
Copy link
Copy Markdown
Collaborator

Congratulations on your new Raycast extension! 🚀

We're currently experiencing a high volume of incoming requests. As a result, the initial review may take up to 10-15 business days.

Once the PR is approved and merged, the extension will be available on our Store.

@antkuznetsov antkuznetsov marked this pull request as ready for review April 20, 2026 20:53
@greptile-apps
Copy link
Copy Markdown
Contributor

greptile-apps Bot commented Apr 20, 2026

Greptile Summary

QuickPic is a new Raycast extension that maintains a keyword-indexed image library stored in the extension support directory, with metadata persisted in LocalStorage. It adds three commands — a searchable library view, a form-based image importer, and a no-view Finder selection importer.

  • Images are copied into environment.supportPath on import; the orphaned-file cleanup on storage-write failure is correctly handled in importImage.
  • The add-selected-image command properly uses the auto-generated Arguments.AddSelectedImage type from raycast-env.d.ts, avoiding the previously flagged manual interface.
  • The $schema field is present in package.json and all dependencies in package.json are imported in source files.

Confidence Score: 5/5

Safe to merge — the extension is self-contained with no network calls, and its file/storage operations are handled correctly.

The core import flow correctly rolls back the copied file if the LocalStorage write fails, the type system is sound, and all error paths surface user-facing toasts. The only findings are a category label choice and a missing inline form validator — neither affects runtime correctness.

No files require special attention.

Important Files Changed

Filename Overview
extensions/quickpic/package.json Extension manifest with $schema present; category set to "Productivity" but "Media" is a more precise match for an image management tool.
extensions/quickpic/src/lib/quickpic.ts Core library logic: file copy + LocalStorage index. Correctly wraps storage write in a try/catch that removes the orphaned file on failure.
extensions/quickpic/src/library.tsx Library list view with paste/copy/delete actions; clean loading and error handling pattern.
extensions/quickpic/src/add-image.tsx Form-based image import with Finder selection and clipboard helpers; error handling via toast.
extensions/quickpic/src/add-selected-image.ts No-view command that imports the currently selected Finder image using auto-generated argument types.
extensions/quickpic/src/types.ts Clean type definitions; QuickPicResolvedItem correctly adds filePath as a runtime-only field not persisted to storage.
Prompt To Fix All With AI
Fix the following 2 code review issues. Work through them one at a time, proposing concise fixes.

---

### Issue 1 of 2
extensions/quickpic/package.json:8-10
The `"Productivity"` category is broader than needed here. The extension's primary function is managing images and pasting them — matching the `"Media"` category description: "Images, video, audio, and related services." Per the extension guidelines, the most specific category should be used.

```suggestion
  "categories": [
    "Media"
  ],
```

### Issue 2 of 2
extensions/quickpic/src/add-image.tsx:101-109
The `Form.FilePicker` has no `validate` prop, so submitting with no file selected falls through to `importImage`, which resolves the empty string to the process working directory and throws "The selected path is not a file." displayed as a toast. Adding an inline `validate` function to the picker gives users clearer, in-context feedback before the form is even submitted.

Reviews (2): Last reviewed commit: "Update quickpic extension" | Re-trigger Greptile

Comment thread extensions/quickpic/.prettierrc Outdated
Comment thread extensions/quickpic/eslint.config.js Outdated
Comment thread extensions/quickpic/package.json
Comment thread extensions/quickpic/src/add-selected-image.ts Outdated
Comment thread extensions/quickpic/src/lib/quickpic.ts Outdated
- Create LICENSE
- Clean up copied image on library write failure
- Ignore Raycast generated env typings
- Use generated Raycast argument types
- Add the Raycast schema reference
- Wrap ESLint config with defineConfig
- Fix Prettier printWidth
- Fix Prettier printWidth
- Add Raycast metadata screenshots
- Add Raycast metadata screenshots
- Remove unused icon asset
- Remove unused icon asset
@raycastbot
Copy link
Copy Markdown
Collaborator

This pull request has been automatically marked as stale because it did not have any recent activity.

It will be closed if no further activity occurs in the next 7 days to keep our backlog clean 😊

@raycastbot raycastbot added the status: stalled Stalled due inactivity label May 5, 2026
@antkuznetsov
Copy link
Copy Markdown
Author

Hey team,

Could you take a look, please?

CC: @raycastbot, @greptile-apps

@raycastbot raycastbot removed the status: stalled Stalled due inactivity label May 10, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

new extension Label for PRs with new extensions platform: macOS

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants